/**
 * Markdown 解析工具
 * 使用 marked 库将 Markdown 转换为 HTML，并配置代码高亮
 */

import { marked } from 'marked'
import hljs from 'highlight.js/lib/core'

// 导入常用语言支持
import javascript from 'highlight.js/lib/languages/javascript'
import typescript from 'highlight.js/lib/languages/typescript'
import python from 'highlight.js/lib/languages/python'
import java from 'highlight.js/lib/languages/java'
import cpp from 'highlight.js/lib/languages/cpp'
import csharp from 'highlight.js/lib/languages/csharp'
import php from 'highlight.js/lib/languages/php'
import go from 'highlight.js/lib/languages/go'
import rust from 'highlight.js/lib/languages/rust'
import sql from 'highlight.js/lib/languages/sql'
import bash from 'highlight.js/lib/languages/bash'
import json from 'highlight.js/lib/languages/json'
import xml from 'highlight.js/lib/languages/xml'
import css from 'highlight.js/lib/languages/css'

// 注册语言
hljs.registerLanguage('javascript', javascript)
hljs.registerLanguage('typescript', typescript)
hljs.registerLanguage('python', python)
hljs.registerLanguage('java', java)
hljs.registerLanguage('cpp', cpp)
hljs.registerLanguage('c++', cpp)
hljs.registerLanguage('csharp', csharp)
hljs.registerLanguage('c#', csharp)
hljs.registerLanguage('php', php)
hljs.registerLanguage('go', go)
hljs.registerLanguage('rust', rust)
hljs.registerLanguage('sql', sql)
hljs.registerLanguage('bash', bash)
hljs.registerLanguage('shell', bash)
hljs.registerLanguage('json', json)
hljs.registerLanguage('xml', xml)
hljs.registerLanguage('html', xml)
hljs.registerLanguage('css', css)

/**
 * 配置 marked
 */
marked.setOptions({
  // 启用 GitHub 风格的 Markdown
  gfm: true,
  // 支持换行
  breaks: true,
  // 代码高亮 - 使用自动检测
  highlight: function(code, lang) {
    try {
      // 直接使用自动检测，hljs 会分析代码特征识别语言
      const result = hljs.highlightAuto(code, [
        'javascript', 'typescript', 'python', 'java',
        'cpp', 'csharp', 'php', 'go', 'rust', 'sql', 'bash', 'json', 'html', 'css'
      ])
      return result.value
    } catch (err) {
      console.error('代码高亮失败:', err)
      return code
    }
  }
})

/**
 * 将 Markdown 转换为 HTML
 * @param markdown Markdown 文本
 * @returns HTML 字符串
 */
export function parseMarkdownToHtml(markdown: string): string {
  if (!markdown) return ''

  try {
    // 使用 marked 解析
    const html = marked.parse(markdown) as string
    return html
  } catch (error) {
    console.error('Markdown 解析失败:', error)
    // 失败时返回转义后的原文
    return markdown.replace(/\n/g, '<br>')
  }
}

/**
 * 同步版本（推荐使用）
 */
export function parseMarkdown(markdown: string): string {
  if (!markdown) return ''

  try {
    // marked.parse 在新版本中是同步的
    const html = marked.parse(markdown) as string
    return html
  } catch (error) {
    console.error('Markdown 解析失败:', error)
    return markdown.replace(/\n/g, '<br>')
  }
}

/**
 * 异步版本（用于处理复杂文档）
 */
export async function parseMarkdownAsync(markdown: string): Promise<string> {
  if (!markdown) return ''

  try {
    const html = await marked.parse(markdown)
    return html as string
  } catch (error) {
    console.error('Markdown 解析失败:', error)
    return markdown.replace(/\n/g, '<br>')
  }
}

// 导出默认解析函数
export default parseMarkdownToHtml

